<?php
//使用方法
//创建目录
//删除目录 如果$rmself=false,则不删除本目录,否则删除本目录,默认$rmself=true
//浏览目录下的文件
//浏览浏览目录小的文件夹
//获取目录大小（单位字节）
class Dirs
{
    // 遍历的目录数组
    var $mFolders = Array();
    // 遍历的文件数组
    var $mFiles = Array();
    var $mDateTime = "Y-m-d H-i-s";
    var $mTimeOffset = 8;
    var $aa = 0;
    function mkDirs ($dir)
    {
        $dir = str_replace("\\", "/", $dir);
        $dirs = explode('/', $dir);
        $total = count($dirs);
        $temp = '';
        for ($i = 0; $i < $total; $i ++) {
            $temp .= $dirs[$i] . '/';
            if (! is_dir($temp)) {
                if (! @mkdir($temp))
                    exit("不能建立目录 $temp");
                     // 改变目录权限 为0777
                @chmod($temp, 0777);
            }
        }
    }
    function rmDirs ($dir, $rmself = true)
    {
        //如果给定路径末尾包含"/",先将其删除
        if (substr($dir, - 1) == "/") {
            $dir = substr($dir, 0, - 1);
        }
        //如给出的目录不存在或者不是一个有效的目录，则返回
        if (! file_exists($dir) || ! is_dir($dir)) {
            return false;
             //如果目录不可读，则返回
        } elseif (! is_readable($dir)) {
            return false;
        } else {
            //打开目录，
            $dirs = opendir($dir);
            //当目录不空时，删除目录里的文件
            while (false !== ($entry = readdir($dirs))) {
                //过滤掉表示当前目录的"."和表示父目录的".."
                if ($entry != "." && $entry != "..") {
                    $path = $dir . "/" . $entry;
                    //为子目录，则递归调用本函数
                    if (is_dir($path)) {
                        $this->rmDirs($path);
                         //为文件直接删除
                    } else {
                        unlink($path);
                    }
                }
            }
            //关闭目录
            closedir($dirs);
            //当$rmself==false时,只清空目录里的文件及目录,$rmself=true时,也删除$dir目录
            if ($rmself) {
                //删除目录
                if (! rmdir($dir)) {
                    return false;
                }
                return true;
            }
        }
    }
    function delFile ($file)
    {
        if (! is_file($file))
            return false;
        @unlink($file);
        return true;
    }
    function createFile ($file, $content = "", $mode = "w")
    {
        if (in_array($mode, array("w", "a")))
            $mode = "w";
        if (! $hd = fopen($file, $mode))
            return false;
        if (! false === fwrite($hd, $content))
            return false;
        return true;
    }
    function getFolders ($dir)
    {
        $this->mFolders = Array();
        //如果给定路径末尾包含"/",先将其删除
        if (substr($dir, - 1) == "/") {
            $dir = substr($dir, 0, - 1);
        }
        //如给出的目录不存在或者不是一个有效的目录，则返回
        if (! file_exists($dir) || ! is_dir($dir)) {
            return false;
        }
        //打开目录，
        $dirs = opendir($dir);
        //把目录下的目录信息写入数组
        $i = 0;
        while (false !== ($entry = readdir($dirs))) {
            //过滤掉表示当前目录的"."和表示父目录的".."
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                //为子目录，则采集信息
                if (is_dir($path)) {
                    $filetime = @filemtime($path);
                    $filetime = @date($this->mDateTime, 
                    $filetime + 3600 * $this->mTimeOffset);
                    // 目录名
                    $this->mFolders[$i]['name'] = $entry;
                    // 目录最后修改时间
                    $this->mFolders[$i]['filetime'] = $filetime;
                    // 目录大小,不计,设为0
                    $this->mFolders[$i]['filesize'] = 0;
                    $path =$dir.'/'.$entry;
                    $this->mFolders[$i] ['path']=$path;
                    $i ++;
                }
            }
        }
        return $this->mFolders;
    }
    function getFiles ($dir)
    {
        $this->mFiles = Array();
        //如果给定路径末尾包含"/",先将其删除
        if (substr($dir, - 1) == "/") {
            $dir = substr($dir, 0, - 1);
        }
        //如给出的目录不存在或者不是一个有效的目录，则返回
        if (! file_exists($dir) || ! is_dir($dir)) {
            return false;
        }
        //打开目录，
        $dirs = opendir($dir);
        //把目录下的文件信息写入数组
        $i = 0;
        while (false !== ($entry = readdir($dirs))) {
            //过滤掉表示当前目录的"."和表示父目录的".."
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                //为子目录，则采集信息
                if (is_file($path)) {
                    $filetime = @filemtime($path);
                    $filetime = @date($this->mDateTime, 
                    $filetime + 3600 * $this->mTimeOffset);
                    $filesize = $this->getFileSize($path);
                    // 文件名
                    $this->mFiles[$i]['name'] = $entry;
                    // 文件最后修改时间
                    $this->mFiles[$i]['filetime'] = $filetime;
                    // 文件的大小
                    $this->mFiles[$i]['filesize'] = $filesize;
                    $i ++;
                }
            }
        }
        return $this->mFiles;
    }
    function getFileSize ($file)
    {
        if (! is_file($file))
            return 0;
        $f1 = $f2 = "";
        $filesize = @filesize("$file");
        // 大于1GB以上的文件
        if ($filesize > 1073741824) {
            // 大于1MB以上的文件
        } elseif ($filesize > 1048576) {
            $filesize = $filesize / 1048576;
            list ($f1, $f2) = explode(".", $filesize);
            $filesize = $f1 . "." . substr($f2, 0, 2) . "MB";
             // 大于1KB小于1MB的文件
        } elseif ($filesize > 1024) {
            $filesize = $filesize / 1024;
            list ($f1, $f2) = explode(".", $filesize);
            $filesize = $f1 . "." . substr($f2, 0, 2) . "KB";
             // 小于1KB的文件
        } else {
            $filesize = $filesize . "字节";
        }
        return $filesize;
    }
    function getFolderSize ($dir)
    {
        if ($handle = opendir($dir)) {
            while (false !== ($file = readdir($handle))) {
                if ($file != "." && $file != "..") {
                    if (is_dir($dir . "/" . $file)) {
                        $this->getFolderSize($dir . "/" . $file);
                    } else {
                        $this->aa += filesize($dir . "/" . $file);
                    }
                }
            }
        }
        return $this->aa;
    }
}
?>